<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Eder
 */
class ProcesarReservaBO extends GeneralSisResBO{
    
    var $fichaDao;
    var $reservaDao;
    var $medicoDao;
    var $horarioDao;
    var $tipoTarjetaDao;
    var $accionVisaDao;
    var $className;
    var $opcionDao;

    public function __construct() {
        $this->className = 'ProcesarReservaBO';
        LogUtil::info("class $this->className", "__construct");
        $this->fichaDao = DAOFactory::getFichaDao();
        $this->reservaDao = DAOFactory::getReservaDao();
        $this->medicoDao = DAOFactory::getMedicoDao();
        $this->horarioDao = DAOFactory::getHorarioDao();
        $this->tipoTarjetaDao = DAOFactory::getTipoTarjetaDao();
        $this->accionVisaDao = DAOFactory::getAccionVisaDao();
        $this->opcionDao = DAOFactory::getOpcionDao();
    }

    public function __destruct() {
        LogUtil::info("class $this->className", "__destruct");
    }

    public function guardarReserva($reserva) {
       LogUtil::info("class $this->className", "guardarReserva"); 
       $retorno = null;
       try{           
           Transaction::beginTransaction(); 
           //1. guardamos la reserva
           $retorno = $this->reservaDao->guardarReserva($reserva);
           //2.actualizamos
           
           $res = $this->fichaDao->actualizarEstadoFicha($reserva->Id_Ficha, EstadoFichaType::Procesando);
           if($res){
              $retorno = $this->reservaDao->guardarReserva($reserva);
           }else{
              Transaction::rollbackTransaction();
           }
           Transaction::commitTransaction();                      
       }catch(Exception $e){
           Transaction::rollbackTransaction();
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $retorno;
    }
    
    public function actualizarReservaPorConfirmacionPago($eticket) {
       LogUtil::info("class $this->className", "actualizarReservaPorConfirmacionPago"); 
       $reserva = null;
       try{           
           Transaction::beginTransaction(); 
           //1. actualizamos la reserva
           $reserva = $this->reservaDao->obtenerReservaPorETicket($eticket);
           //2.actualizamos el estado de la reserva
           $res = $this->reservaDao->actualizarEstadoReserva($reserva->id, EstadoReservaType::Confirmada);
           if($res){
           //3.actualizamos el estado de la ficha
             $res = $this->fichaDao->actualizarEstadoFicha($reserva->Id_Ficha, EstadoFichaType::Reservada);
           }
           Transaction::commitTransaction();                      
       }catch(Exception $e){
           Transaction::rollbackTransaction();
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $reserva->id;
    }
    
    public function actualizarReservaPorErrorPago($eticket) {
       LogUtil::info("class $this->className", "actualizarReservaPorErrorPago"); 
       $reserva = null;
       try{           
           Transaction::beginTransaction(); 
           //1. actualizamos la reserva
           $reserva = $this->reservaDao->obtenerReservaPorETicket($eticket);
           //2.actualizamos el estado de la reserva
           $res = $this->reservaDao->actualizarEstadoReserva($reserva->id, EstadoReservaType::Anulada);
           if($res){
           //3.actualizamos el estado de la ficha
             $res = $this->fichaDao->actualizarEstadoFicha($reserva->Id_Ficha, EstadoFichaType::Anulada);
           }
           Transaction::commitTransaction();                      
       }catch(Exception $e){
           Transaction::rollbackTransaction();
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $reserva->id;
    }

}
?>
